package com.myapp.jsf.controler;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import org.primefaces.context.RequestContext;
import com.myapp.constantes.Constantes;
import com.myapp.dao.PagoConceptoDao;
import com.myapp.dao.PagoSocioDao;
import com.myapp.dao.SocioDao;
import com.myapp.entity.PagoConcepto;
import com.myapp.entity.PagoSocio;
import com.myapp.entity.Socio;

public class RegistroPagoSocioControler {

	@EJB
	private PagoSocioDao pagoDao;
	@EJB
	private PagoConceptoDao coneptoDao;
	@EJB
	private SocioDao socioDao;

	private PagoSocio pagoSocio;
	private String numeroRecibo;
	private Map<String, Long> listaConcepto;
	private Map<String, Long> listaSocioPagante;
	private Map<String, Long> listaSocioCobrador;
	private Long idUnidadH;

	public RegistroPagoSocioControler() {
		pagoSocio = new PagoSocio();
		listaConcepto = new HashMap<String, Long>();
		listaSocioPagante = new HashMap<String, Long>();
		listaSocioCobrador = new HashMap<String, Long>();
	}

	public Long getIdUnidadH() {
		return idUnidadH;
	}

	public void setIdUnidadH(Long idUnidadH) {
		this.idUnidadH = idUnidadH;
	}

	public Map<String, Long> getListaSocioPagante() {
		return listaSocioPagante;
	}

	public void setListaSocioPagante(Map<String, Long> listaSocioPagante) {
		this.listaSocioPagante = listaSocioPagante;
	}

	public Map<String, Long> getListaSocioCobrador() {
		return listaSocioCobrador;
	}

	public void setListaSocioCobrador(Map<String, Long> listaSocioCobrador) {
		this.listaSocioCobrador = listaSocioCobrador;
	}

	public Map<String, Long> getListaConcepto() {
		return listaConcepto;
	}

	public void setListaConcepto(Map<String, Long> listaConcepto) {
		this.listaConcepto = listaConcepto;
	}

	public PagoSocio getPagoSocio() {
		return pagoSocio;
	}

	public void setPagoSocio(PagoSocio pagoSocio) {
		this.pagoSocio = pagoSocio;
	}

	public String getNumeroRecibo() {
		return numeroRecibo;
	}

	public void setNumeroRecibo(String numeroRecibo) {
		this.numeroRecibo = numeroRecibo;
	}

	public void cargarCombos() {			
		  List<PagoConcepto> list =coneptoDao.consultarConceptosPago(idUnidadH); 
		  if (list != null) {
		  for (PagoConcepto p : list) { 
		  listaConcepto.put(p.getConcepto(),p.getIdConcepto()); } 
		  } 
		  List<Socio> sociosP = socioDao.consultarSocios(idUnidadH); 
		  if(sociosP!=null){ 
		   String nombre =""; for(Socio s:sociosP)
		  { nombre = s.getNombreSocio()+" "+s.getApellidoPaterno()+" "+s.getApellidoMaterno(); 
		    listaSocioPagante.put(nombre,s.getIdSocio()); } 
		  } 
		  List<Socio> sociosC =socioDao.consultarSociosComision(Constantes.FINANZAS, idUnidadH); 
		  if(sociosC!=null){
		  String nombre =""; 
		  for(Socio s:sociosC){ 
			nombre =s.getNombreSocio()+" "+s.getApellidoPaterno()+" "+s.getApellidoMaterno();
		  listaSocioCobrador.put(nombre, s.getIdSocio()); 
		  } 
		 }		 
	}

	public void registrarPago() {
		System.out.println("ENtrando al registro");
		if (pagoSocio.getFechaEntrega() == null) {
			pagoSocio.setFechaEntrega(new Date());}
		if (pagoSocio.getFechaPago() == null) {
			pagoSocio.setFechaPago(new Date());}
		generarNumeroRecibo();
		pagoSocio.setNumeroRecibo(getNumeroRecibo());		
		pagoDao.guardar(pagoSocio);
		mostrarMensaje();
		limpiarCampos();
	}

	public void generarNumeroRecibo() {
		System.out.println("id: " + getPagoSocio().getIdSocioPagante());
		Long numeroPagos = pagoDao.consultarNumeroPagoSocio(pagoSocio.getIdSocioPagante());
		System.out.println("Numero Pagos: " + numeroPagos);
		numeroPagos++;String fecha = numeroPagos + " - "+ new Date().toString().substring(0, 5);
		numeroRecibo = fecha;
	}

	public void limpiarCampos() {
		PagoSocio pago = new PagoSocio();
		pago.setCantidad(0d);
		pago.setNumeroRecibo("");
		pago.setFechaEntrega(null);
		pago.setFechaPago(null);
		numeroRecibo = "";
		setPagoSocio(pago);
	}
	
	public void mostrarMensaje(){
		FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Estado del Registro", "El registro se realizo correctamente");      
        RequestContext.getCurrentInstance().showMessageInDialog(message);
	}

}
